package com.mercury.ec.module.air.controller.admin.order.vo.order;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mercury.ec.framework.excel.core.annotations.DictFormat;
import com.mercury.ec.framework.excel.core.convert.DictConvert;
import com.mercury.ec.module.air.controller.admin.order.vo.orderpassenger.AirOrderPassengerRespVO;
import com.mercury.ec.module.air.controller.admin.order.vo.orderpnrlog.AirOrderPnrLogRespVO;
import com.mercury.ec.module.air.controller.admin.order.vo.orderprice.AirOrderPriceRespVO;
import com.mercury.ec.module.air.controller.admin.order.vo.orderroute.AirOrderRouteRespVO;
import com.mercury.ec.module.basic.controller.admin.orderpay.vo.OrderPayRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

import static com.mercury.ec.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static com.mercury.ec.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

@Schema(description = "管理后台 - 机票订单 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AirOrderRespVO {

    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11414")
    @ExcelProperty("id")
    private Long id;

    @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("订单号")
    private String no;

    @Schema(description = "订单来源 字典（air_order_source_type 1-手工订单/2-白屏/3-ETERM/4-需求单）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "订单来源", converter = DictConvert.class)
    @DictFormat("air_order_source_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer sourceType;

    @Schema(description = "来源单号")
    @ExcelProperty("来源单号")
    private String sourceNo;

    @Schema(description = "原订单id")
    private Long originOrderId;

    @Schema(description = "原订单号")
    private String originOrderNo;

    @Schema(description = "最后改签类型 字典（air_order_change_type 1-改期/2-升舱）", example = "2")
    private Integer finallyChangeType;

    @Schema(description = "系统客户端 字典（system_client_type 1-中台/2-分销/3-差旅）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "客户端", converter = DictConvert.class)
    @DictFormat("system_client_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer clientType;

    @Schema(description = "订单类型 字典（air_order_type 1-销售单/2-改签单/3-退票单/4-调账单）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "订单类型", converter = DictConvert.class)
    @DictFormat("air_order_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer type;

    @Schema(description = "改签状态 字典（air_order_change_status 0-未改签，1-部分改签，2-已改签）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "改签状态", converter = DictConvert.class)
    @DictFormat("air_order_change_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer changeStatus;

    @Schema(description = "退票状态 字典（air_order_return_status 0-未退票，1-部分退票，2-已退票）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "退票状态", converter = DictConvert.class)
    @DictFormat("air_order_return_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer returnStatus;

    @Schema(description = "调账状态 字典（air_order_adjust_status 0-未调账，1-部分调账，2-已调账）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "调账状态", converter = DictConvert.class)
    @DictFormat("air_order_adjust_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer adjustStatus;

    @Schema(description = "归属部门id 见表（system_dept.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "560")
    private Long deptId;

    @Schema(description = "归属部门名称")
    @ExcelProperty("归属部门")
    private String deptName;

    @Schema(description = "团号")
    @ExcelProperty("团号")
    private String groupNo;

    @Schema(description = "业务类型 字典（basic_biz_scope_type 1-国内/2-国际）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "业务类型", converter = DictConvert.class)
    @DictFormat("basic_biz_scope_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer scopeType;

    @Schema(description = "行程类型 字典（air_order_route_type 1-单程/2-往返/3-联程）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "行程类型", converter = DictConvert.class)
    @DictFormat("air_order_route_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer routeType;

    @Schema(description = "票证类型 字典（basic_vendor_ticket_type 1-BSP/2-B2B/3-B2C/4-GP/5-外购/6-BOP）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "票证类型", converter = DictConvert.class)
    @DictFormat("air_order_ticket_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer ticketType;

    @Schema(description = "订座编码")
    @ExcelProperty("订座编码")
    private String pnr;

    @Schema(description = "编码状态 HK-预订/XX-取消/RR-出票")
    @ExcelProperty("编码状态")
    private String pnrStatus;

    @Schema(description = "航司大编码")
    @ExcelProperty("航司大编码")
    private String bigPnr;

    @Schema(description = "乘客人数", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("乘客人数")
    private Integer passengerNum;

    @Schema(description = "是否携带婴儿", example = "true")
    @ExcelProperty(value = "是否携带婴儿", converter = DictConvert.class)
    @DictFormat("infra_boolean_string")
    private Boolean haveBaby;

    @Schema(description = "是否携带儿童", example = "true")
    @ExcelProperty(value = "是否携带儿童", converter = DictConvert.class)
    @DictFormat("infra_boolean_string")
    private Boolean haveChild;

    @Schema(description = "订单状态 字典（air_sale_order_status 0-已取消/10-新订单/20-待审核/25-已拒绝/30-待支付/40-待出票/45-出票中/50-已出票/55-出票失败 air_change_order_status 0-已取消/10-新订单/20-待审核/25-已拒绝/30-待支付/40-待出票/45-出票中/50-已出票/55-出票失败 air_return_order_status 0-已取消/10-新订单/20-待审核/25-已拒绝/30-待退款/40-待退票/45-退票中/50-已退票/55-退票失败 air_adjust_order_status 0-已取消/10-新订单/20-待审核/25-已拒绝/30-待支付/40-待出票/45-出票中/50-已出票/55-出票失败）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "订单状态", converter = DictConvert.class)
    @DictFormat("air_sale_order_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer status;

    @Schema(description = "客户id 见表（basic_customer.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "16640")
    private Long customerId;

    @Schema(description = "客户编号")
    @ExcelProperty("客户编号")
    private String customerNo;

    @Schema(description = "客户名称", example = "李四")
    @ExcelProperty("客户名称")
    private String customerName;

    @Schema(description = "客户协议类型 字典（air_customer_agreement_type 1-普通/2-GP/3-三方协议）", example = "2")
    @ExcelProperty(value = "客户协议类型", converter = DictConvert.class)
    @DictFormat("air_customer_agreement_type")
    private Integer customerAgreementType;

    @Schema(description = "客户协议号")
    @ExcelProperty("客户协议号")
    private String customerAgreementNo;

    @Schema(description = "业务员id 见表（system_users.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "14732")
    private Long salesmanUserId;

    @Schema(description = "业务员姓名", example = "王五")
    @ExcelProperty("业务员")
    private String salesmanUserNickname;

    @Schema(description = "业务员部门id 见表（system_dept.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "22943")
    private Long salesmanDeptId;

    @Schema(description = "业务员部门")
    @ExcelProperty("业务员部门")
    private String salesmanDeptName;

    @Schema(description = "预订员id 见表（system_users.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2486")
    private Long bookUserId;

    @Schema(description = "预订员姓名")
    @ExcelProperty("预订员")
    private String bookUserNickname;

    @Schema(description = "预订部门id 见表（system_dept.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "26302")
    private Long bookDeptId;

    @Schema(description = "预订部门")
    @ExcelProperty("预订部门")
    private String bookDeptName;

    @Schema(description = "预订时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("预订时间")
    private LocalDateTime bookTime;

    @Schema(description = "预订office")
    @ExcelProperty("预订office")
    private String bookOffice;

    @Schema(description = "预订渠道", example = "1")
    private Long bookChannelId;

    @Schema(description = "预订渠道", example = "渠道名称")
    @ExcelProperty("预订渠道")
    private String bookChannelName;

    @Schema(description = "调度员id 见表（system_users.id）", example = "17733")
    private Long dispatchUserId;

    @Schema(description = "调度员姓名")
    @ExcelProperty("调度员")
    private String dispatchUserNickname;

    @Schema(description = "调往部门id 见表（system_dept.id）", example = "19713")
    private Long dispatchDeptId;

    @Schema(description = "调往部门")
    @ExcelProperty("调往部门")
    private String dispatchDeptName;

    @Schema(description = "调度时间")
    @ExcelProperty("调度时间")
    private LocalDateTime dispatchTime;

    @Schema(description = "是否锁单")
    @ExcelProperty(value = "是否锁单", converter = DictConvert.class)
    @DictFormat("infra_boolean_string") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Boolean locked;

    @Schema(description = "锁单员id 见表（system_users.id）", example = "24966")
    private Long lockUserId;

    @Schema(description = "锁单员姓名")
    @ExcelProperty("锁单员")
    private String lockUserNickname;

    @Schema(description = "锁单部门id 见表（system_dept.id）", example = "1733")
    private Long lockDeptId;

    @Schema(description = "锁单部门")
    @ExcelProperty("锁单部门")
    private String lockDeptName;

    @Schema(description = "锁单时间")
    @ExcelProperty("锁单时间")
    private LocalDateTime lockTime;

    @Schema(description = "出（退）票时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("出（退）票时间")
    private LocalDateTime issueTime;

    @Schema(description = "出（退）票员id 见表（system_users.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "20888")
    private Long issueUserId;

    @Schema(description = "出票员姓名")
    @ExcelProperty("出票员")
    private String issueUserNickname;

    @Schema(description = "出（退）票部门id 见表（system_dept.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "12864")
    private Long issueDeptId;

    @Schema(description = "出票部门")
    @ExcelProperty("出票部门")
    private String issueDeptName;

    @Schema(description = "出（退）票渠道id 见表（basic_channel.id）", example = "100")
    private Long issueChannelId;

    @Schema(description = "出（退）票渠道", example = "渠道名称")
    @ExcelProperty("出（退）票渠道")
    private String issueChannelName;

    @Schema(description = "出票office")
    @ExcelProperty("出票office")
    private String issueOffice;

    @Schema(description = "拒单时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] refuseTime;

    @Schema(description = "拒单员id 见表（system_users.id）", example = "20888")
    private Long refuseUserId;

    @Schema(description = "拒单操作员姓名")
    @ExcelProperty("拒单操作员")
    private String refuseUserNickname;

    @Schema(description = "拒单部门id 见表（system_dept.id）", example = "12864")
    private Long refuseDeptId;

    @Schema(description = "拒单部门")
    @ExcelProperty("拒单部门")
    private String refuseDeptName;

    @Schema(description = "拒单原因")
    private String refuseCause;

    @Schema(description = "审核用户id 见表（system_users.id）", example = "20888")
    private Long auditUserId;

    @Schema(description = "审核操作员姓名")
    @ExcelProperty("审核操作员")
    private String auditUserNickname;

    @Schema(description = "审核部门id 见表（system_dept.id）", example = "12864")
    private Long auditDeptId;

    @Schema(description = "审核部门")
    @ExcelProperty("审核部门")
    private String auditDeptName;

    @Schema(description = "审核时间")
    private LocalDateTime auditTime;

    @Schema(description = "审核状态 字典（air_order_audit_status 0-待审核/1-同意/2-拒绝）", example = "1")
    private Integer auditStatus;

    @Schema(description = "审核备注")
    private String auditRemark;

    @Schema(description = "是否需要发票", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "是否需要发票", converter = DictConvert.class)
    @DictFormat("infra_boolean_string") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Boolean needInvoice;

    @Schema(description = "开票方式 字典（basic_make_invoice_type 1-统一发票/2-单项发票）", example = "2")
    @ExcelProperty(value = "开票方式", converter = DictConvert.class)
    @DictFormat("basic_make_invoice_type")
    private Integer makeInvoiceType;

    @Schema(description = "是否回收发票", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
    @ExcelProperty(value = "是否回收发票", converter = DictConvert.class)
    @DictFormat("infra_boolean_string")
    private Boolean recycleInvoice;

    @Schema(description = "发票类型 字典（basic_air_invoice_type）", example = "2")
    @ExcelProperty(value = "发票类型", converter = DictConvert.class)
    @DictFormat("air_invoice_type")
    private Integer invoiceType;

    @Schema(description = "配送方式 字典（system_delivery_type）", example = "1")
    @ExcelProperty(value = "配送方式", converter = DictConvert.class)
    @DictFormat("system_delivery_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer deliveryType;

    @Schema(description = "配送备注", example = "你猜")
    @ExcelProperty("配送备注")
    private String deliveryRemark;

    @Schema(description = "配送费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("配送费")
    private Integer deliveryFee;

    @Schema(description = "配送联系人")
    @ExcelProperty("配送联系人")
    private String deliveryContact;

    @Schema(description = "配送联系人电话")
    @ExcelProperty("配送联系人电话")
    private String deliveryContactPhone;

    @Schema(description = "配送城市id 见表（system_city.id）", example = "13766")
    private Long deliveryCityId;

    @Schema(description = "配送城市")
    @ExcelProperty("配送城市")
    private String deliveryCityName;

    @Schema(description = "配送地址")
    @ExcelProperty("配送地址")
    private String deliveryAddress;

    @Schema(description = "配送邮箱")
    @ExcelProperty("配送邮箱")
    private String deliveryEmail;

    @Schema(description = "配送员id")
    private Long deliveryUserId;

    @Schema(description = "配送员姓名")
    @ExcelProperty("配送员姓名")
    private String deliveryUserNickname;

    @Schema(description = "配送部门id")
    private Long deliveryDeptId;

    @Schema(description = "配送部门")
    @ExcelProperty("配送部门")
    private String deliveryDeptName;

    @Schema(description = "配送时间")
    @ExcelProperty("配送时间")
    private LocalDateTime deliveryTime;

    @Schema(description = "取消规则id 见表（train_cancel_rule.id）", example = "13766")
    @ExcelProperty("取消规则id 见表（train_cancel_rule.id）")
    private Long cancelRuleId;

    @Schema(description = "取消操作员id 见表（system_users.id）", example = "14219")
    private Long cancelUserId;

    @Schema(description = "取消操作员姓名")
    @ExcelProperty("取消操作员")
    private String cancelUserNickname;

    @Schema(description = "取消部门id 见表（system_dept.id）", example = "11064")
    private Long cancelDeptId;

    @Schema(description = "取消部门")
    @ExcelProperty("取消部门")
    private String cancelDeptName;

    @Schema(description = "取消时间")
    @ExcelProperty("取消时间")
    private LocalDateTime cancelTime;

    @Schema(description = "取消原因")
    @ExcelProperty("取消原因")
    private String cancelCause;

    @Schema(description = "最后改签员id 见表（system_users.id）", example = "10994")
    private Long finallyChangeUserId;

    @Schema(description = "最后改签员姓名")
    @ExcelProperty("最后改签员")
    private String finallyChangeUserNickname;

    @Schema(description = "最后改签部门id 见表（system_dept.id）", example = "32538")
    private Long finallyChangeDeptId;

    @Schema(description = "最后改签部门")
    @ExcelProperty("最后改签部门")
    private String finallyChangeDeptName;

    @Schema(description = "最后改签时间")
    @ExcelProperty("最后改签时间")
    private LocalDateTime finallyChangeTime;

    @Schema(description = "最后退票订单类型 字典（air_order_return_order_type 1-退票/2-废票）", example = "1")
    @ExcelProperty(value = "最后退票订单类型", converter = DictConvert.class)
    @DictFormat("air_order_return_order_type")
    private Integer finallyReturnOrderType;

    @Schema(description = "最后退票类型 字典（air_order_return_type 1-自愿/2-非自愿）", example = "1")
    @ExcelProperty(value = "最后退票类型", converter = DictConvert.class)
    @DictFormat("air_order_return_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer finallyReturnType;

    @Schema(description = "最后退票原因 字典（air_order_return_cause）", example = "1")
    @ExcelProperty(value = "最后退票原因", converter = DictConvert.class)
    @DictFormat("air_order_return_cause")
    private Integer finallyReturnCause;

    @Schema(description = "最后退票员id 见表（system_users.id）", example = "12414")
    private Long finallyReturnUserId;

    @Schema(description = "最后退票员姓名")
    @ExcelProperty("最后退票员")
    private String finallyReturnUserNickname;

    @Schema(description = "最后退票部门id 见表（system_dept.id）", example = "12459")
    private Long finallyReturnDeptId;

    @Schema(description = "最后退票部门")
    @ExcelProperty("最后退票部门")
    private String finallyReturnDeptName;

    @Schema(description = "最后退票时间")
    @ExcelProperty("最后退票时间")
    private LocalDateTime finallyReturnTime;

    @Schema(description = "最后调账类型 字典（air_order_adjust_type 1-/2-/3-）", example = "2")
    @ExcelProperty(value = "最后调账类型", converter = DictConvert.class)
    @DictFormat("air_order_adjust_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer finallyAdjustType;

    @Schema(description = "最后调账员id 见表（system_users.id）", example = "16600")
    private Long finallyAdjustUserId;

    @Schema(description = "最后调账员姓名")
    @ExcelProperty("最后调账员")
    private String finallyAdjustUserNickname;

    @Schema(description = "最后调账部门id 见表（system_dept.id）", example = "1237")
    private Long finallyAdjustDeptId;

    @Schema(description = "最后调账部门")
    @ExcelProperty("最后调账部门")
    private String finallyAdjustDeptName;

    @Schema(description = "最后调账时间")
    @ExcelProperty("最后调账时间")
    private LocalDateTime finallyAdjustTime;

    @Schema(description = "附加费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("附加费")
    private BigDecimal saleAdditionalFee;

    @Schema(description = "服务费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("服务费")
    private BigDecimal saleServiceFee;

    @Schema(description = "升舱费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("升舱费")
    private BigDecimal saleUpgradeFee;

    @Schema(description = "改期费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("改期费")
    private BigDecimal saleChangeFee;

    @Schema(description = "退票费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("退票费")
    private BigDecimal saleReturnFee;

    @Schema(description = "票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "28583")
    @ExcelProperty("票面价")
    private BigDecimal saleTicketPrice;

    @Schema(description = "销售价", requiredMode = Schema.RequiredMode.REQUIRED, example = "19901")
    @ExcelProperty("销售价")
    private BigDecimal salePrice;

    @Schema(description = "已用票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "20778")
    @ExcelProperty("已用票面价")
    private BigDecimal saleUsedPrice;

    @Schema(description = "机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("机建税")
    private BigDecimal saleAirportTax;

    @Schema(description = "已用机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用机建税")
    private BigDecimal saleUsedAirportTax;

    @Schema(description = "燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("燃油税")
    private BigDecimal saleOilTax;

    @Schema(description = "已用燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用燃油税")
    private BigDecimal saleUsedOilTax;

    @Schema(description = "销售税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("销售税")
    private BigDecimal saleTax;

    @Schema(description = "已用销售税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用销售税")
    private BigDecimal saleUsedTax;

    @Schema(description = "代理费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("代理费")
    private BigDecimal saleAgencyFee;

    @Schema(description = "后返费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("后返费")
    private BigDecimal saleBackRebateFee;

    @Schema(description = "记奖价", requiredMode = Schema.RequiredMode.REQUIRED, example = "28246")
    @ExcelProperty("记奖价")
    private BigDecimal salePrizePrice;

    @Schema(description = "记奖税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("记奖税")
    private BigDecimal salePrizeTax;

    @Schema(description = "销售金额", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("销售金额")
    private BigDecimal saleAmount;

    @Schema(description = "应收", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("应收")
    private BigDecimal saleReceivable;

    @Schema(description = "实收", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("实收")
    private BigDecimal saleReceipts;

    @Schema(description = "结算方式 字典（system_settle_type）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "结算方式", converter = DictConvert.class)
    @DictFormat("system_settle_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer saleSettleType;

    @Schema(description = "支付状态 字典（system_pay_status）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "支付状态", converter = DictConvert.class)
    @DictFormat("system_pay_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer salePayStatus;

    @Schema(description = "支付方式id 见表（basic_pay_type.id）", example = "15844")
    private Long salePayTypeId;

    @Schema(description = "支付方式")
    @ExcelProperty("支付方式")
    private String salePayTypeName;

    @Schema(description = "支付科目id 见表（basic_pay_subject.id）", example = "27542")
    private Long salePaySubjectId;

    @Schema(description = "支付科目")
    @ExcelProperty("支付科目")
    private String salePaySubjectName;

    @Schema(description = "支付账号", example = "20047")
    @ExcelProperty("支付账号")
    private String salePayAccount;

    @Schema(description = "支付单号")
    @ExcelProperty("支付单号")
    private String salePayOrderNo;

    @Schema(description = "支付时间")
    @ExcelProperty("支付时间")
    private LocalDateTime salePayTime;

    @Schema(description = "是否在线支付")
    @ExcelProperty(value = "是否在线支付", converter = DictConvert.class)
    @DictFormat("infra_boolean_string") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Boolean salePayOnline;

    @Schema(description = "对账日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("对账日期")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDate saleReconcileDate;

    @Schema(description = "结算日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("结算日期")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDate saleSettleDate;

    @Schema(description = "采购商id 见表（basic_vendor.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "28311")
    private Long purchaseId;

    @Schema(description = "采购商名称", example = "王五")
    @ExcelProperty("采购商")
    private String purchaseName;

    @Schema(description = "采购单号")
    @ExcelProperty("采购单号")
    private String purchaseOrderNo;

    @Schema(description = "采购附加费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购附加费")
    private BigDecimal purchaseAdditionalFee;

    @Schema(description = "采购服务费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购服务费")
    private BigDecimal purchaseServiceFee;

    @Schema(description = "采购升舱费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购升舱费")
    private BigDecimal purchaseUpgradeFee;

    @Schema(description = "采购改期费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购改期费")
    private BigDecimal purchaseChangeFee;

    @Schema(description = "采购退票费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购退票费")
    private BigDecimal purchaseReturnFee;

    @Schema(description = "采购票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "3654")
    @ExcelProperty("采购票面价")
    private BigDecimal purchaseTicketPrice;

    @Schema(description = "采购价", requiredMode = Schema.RequiredMode.REQUIRED, example = "28309")
    @ExcelProperty("采购价")
    private BigDecimal purchasePrice;

    @Schema(description = "已用采购票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "10111")
    @ExcelProperty("已用采购票面价")
    private BigDecimal purchaseUsedPrice;

    @Schema(description = "采购机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购机建税")
    private BigDecimal purchaseAirportTax;

    @Schema(description = "已用采购机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用采购机建税")
    private BigDecimal purchaseUsedAirportTax;

    @Schema(description = "采购燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购燃油税")
    private BigDecimal purchaseOilTax;

    @Schema(description = "已用采购燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用采购燃油税")
    private BigDecimal purchaseUsedOilTax;

    @Schema(description = "采购税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购税")
    private BigDecimal purchaseTax;

    @Schema(description = "已用采购税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用采购税")
    private BigDecimal purchaseUsedTax;

    @Schema(description = "采购代理费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购代理费")
    private BigDecimal purchaseAgencyFee;

    @Schema(description = "采购后返费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购后返费")
    private BigDecimal purchaseBackRebateFee;

    @Schema(description = "采购记奖价", requiredMode = Schema.RequiredMode.REQUIRED, example = "28939")
    @ExcelProperty("采购记奖价")
    private BigDecimal purchasePrizePrice;

    @Schema(description = "采购记奖税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购记奖税")
    private BigDecimal purchasePrizeTax;

    @Schema(description = "采购金额", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购金额")
    private BigDecimal purchaseAmount;

    @Schema(description = "采购应付", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购应付")
    private BigDecimal purchasePayable;

    @Schema(description = "采购实付", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购实付")
    private BigDecimal purchasePayment;

    @Schema(description = "采购支付状态 字典（system_pay_status）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "采购支付状态", converter = DictConvert.class)
    @DictFormat("system_pay_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer purchasePayStatus;

    @Schema(description = "采购支付科目id 见表（basic_pay_subject.id）", example = "22116")
    private Long purchasePaySubjectId;

    @Schema(description = "采购支付科目", example = "王五")
    @ExcelProperty("采购支付科目")
    private String purchasePaySubjectName;

    @Schema(description = "采购支付方式id 见表（basic_pay_type.id）", example = "8940")
    private Long purchasePayTypeId;

    @Schema(description = "采购支付方式", example = "王五")
    @ExcelProperty("采购支付方式")
    private String purchasePayTypeName;

    @Schema(description = "采购支付账号", example = "4194")
    @ExcelProperty("采购支付账号")
    private String purchasePayAccount;

    @Schema(description = "采购支付单号")
    @ExcelProperty("采购支付单号")
    private String purchasePayOrderNo;

    @Schema(description = "采购支付时间")
    @ExcelProperty("采购支付时间")
    private LocalDateTime purchasePayTime;

    @Schema(description = "采购是否在线支付")
    @ExcelProperty(value = "采购是否在线支付", converter = DictConvert.class)
    @DictFormat("infra_boolean_string") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Boolean purchasePayOnline;

    @Schema(description = "采购对账日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购对账日期")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDate purchaseReconcileDate;

    @Schema(description = "采购结算日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购结算日期")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDate purchaseSettleDate;

    @Schema(description = "联系人")
    @ExcelProperty("联系人")
    private String contact;

    @Schema(description = "联系人证件类型 字典（system_card_type）", example = "1")
    @ExcelProperty(value = "联系人证件类型", converter = DictConvert.class)
    @DictFormat("system_card_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer contactCardType;

    @Schema(description = "联系人证件号")
    @ExcelProperty("联系人证件号")
    private String contactCardNo;

    @Schema(description = "联系人电话")
    @ExcelProperty("联系人电话")
    private String contactPhone;

    @Schema(description = "联系人手机")
    @ExcelProperty("联系人手机")
    private String contactMobile;

    @Schema(description = "联系人邮箱")
    @ExcelProperty("联系人邮箱")
    private String contactEmail;

    @Schema(description = "备注", example = "你说的对")
    @ExcelProperty("备注")
    private String remark;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

    @Schema(description = "行程信息")
    private List<AirOrderRouteRespVO> routes;

    @Schema(description = "乘客信息")
    private List<AirOrderPassengerRespVO> passengers;

    @Schema(description = "价格信息")
    private List<AirOrderPriceRespVO> prices;

    @Schema(description = "PNR日志信息")
    private List<AirOrderPnrLogRespVO> pnrLogs;

    @Schema(description = "支付信息")
    private List<OrderPayRespVO> payments;
}
